"""
3169. 无需开会的工作日
中等
相关标签
premium lock icon
相关企业
提示
给你一个正整数 days，表示员工可工作的总天数（从第 1 天开始）。另给你一个二维数组 meetings，长度为 n，其中 meetings[i] = [start_i, end_i] 表示第 i 次会议的开始和结束天数（包含首尾）。

返回员工可工作且没有安排会议的天数。

注意：会议时间可能会有重叠。



示例 1：

输入：days = 10, meetings = [[5,7],[1,3],[9,10]]

输出：2

解释：

第 4 天和第 8 天没有安排会议。

示例 2：

输入：days = 5, meetings = [[2,4],[1,3]]

输出：1

解释：

第 5 天没有安排会议。

示例 3：

输入：days = 6, meetings = [[1,6]]

输出：0

解释：

所有工作日都安排了会议。



提示：

1 <= days <= 109
1 <= meetings.length <= 105
meetings[i].length == 2
1 <= meetings[i][0] <= meetings[i][1] <= days
"""
from typing import List


class Solution:
    def countDays(self, days: int, meetings: List[List[int]]) -> int:
        meetings.sort(key=lambda x: x[0])
        res = 0
        r = meetings[0][1]
        for i in range(1,len(meetings)):
            if meetings[i][0] > r + 1:
                res += meetings[i][0] - r -1
            r = max(r,meetings[i][1])
        res += meetings[0][0] - 1
        res += days - r
        return  res
if __name__ == '__main__':
    # 8 [[3,4],[4,8],[2,5],[3,8]]
    # meetings1 = [[3,4],[4,8],[2,5],[3,8]]
    # print(Solution().countDays(8,meetings1)) #
    meetings2 = [[3,49],[23,44],[21,56],[26,55],[23,52],[2,9],[1,48],[3,31]]
    print(Solution().countDays(57,meetings2)) #1